// var a =1; var b =2; var c =3; console.log(a,b);
// 生成代码有两种思路
// 1.(webpack) 改变语法树 删除 var c =3; 重新生成源代码
// 2.(rollup) 语法树不动 要哪个取出来，拼在一起输出 var a =1; var b =2; console.log(a,b);

// Tree-shaking的本质是消除无用的js代码
// rollup只处理函数和顶层的import/export变量

// tree shaking的原理是什么?  
// 1.ES6 Module引入进行静态分析，故而编译的时候正确判断到底加载了那些模块。因此treeshaking只能用于ES6 Module
// 2.静态分析程序流，判断那些模块和变量未被使用或者引用，进而删除对应代码


import babel from 'rollup-plugin-babel'; // 这是社区的
import resolve from '@rollup/plugin-node-resolve';//支持使用第三方模块
import commonjs from '@rollup/plugin-commonjs'; //支持使用第三方模块。带@的是官方插件，只有rollup官方才能发布
// import typescript from '@rollup/plugin-typescript'; //支持TS
import {terser} from 'rollup-plugin-terser'; //支持压缩JS。terser是支持ES6 +的JavaScript压缩器工具包
import postcss from 'rollup-plugin-postcss'; //支持CSS
import serve from 'rollup-plugin-serve'; //支持本地服务器

export default {
    // input:'src/main.ts', //支持TS
    input:'src/main.js',
    output:{
        file:'dist/bundle.cjs.js',//输出文件的路径和名称

        // AMD异步模块定义(基本废了)
        // ES6 module是es6提出了新的模块化方案
        // IIFE即立即执行函数表达式，所谓立即执行，就是声明一个函数，声明完了立即执行
        // UMD,也就是通用模块定义
        // cjs是nodejs采用的模块化标准，commonjs使用方法require来引入模块,这里require()接收的参数是模块名或者是模块文件的路径

        format:'cjs',//五种输出格式：amd(基本废了)/es6/iife/umd/cjs(commonjs)
        name:'bundleName',//当format为iife和umd时必须提供，将作为全局变量挂在window下
        globals:{//支持CDN
           lodash:'_', //告诉rollup全局变量_即是lodash
           jquery:'$' //告诉rollup全局变量$即是jquery
       }
    },
    /* plugins: [ 
        babel({ //支持babel。 .babelrc中{"modules":false} 模块的关键字 import export不要让babel进行转译，而是交给rollup进行处理
            exclude: /node_modules/
        }),
        resolve(), //支持使用第三方模块
        commonjs(), //支持使用第三方模块
        // typescript(),//支持TS
        terser(),//支持压缩JS
        postcss(),//支持CSS
        serve({ //支持本地服务器
           open:true,
           port:8080,
           contentBase:'./dist'
       })
    ], */
    external:['lodash','jquery'] //支持CDN
}